#ifndef GLOBAL_VARIABLES_H
#define GLOBAL_VARIABLES_H

#include <string>
#include <stdint.h>
#include "water/typedef.h"
#include "water/self_mode.h"

namespace Global {

    namespace Water {
        extern int Count;
        extern int ColdWaterCount;    // 冷水计数（s）
        extern int ColdWaterNum;      // 冷水量（ml）
        extern int waterTimeOut;     // 制水超时
        extern int bushuiCount;      // 补水计时
        extern int paishuiCount;     // 排水计时
        extern int bupaishuiCount;    // 补排水计时
        extern int water_value;       // 水量
        extern int last_water_value;  // 上一次水量
        extern int water_speed;      // 出水速度
        extern int speed_last_water_num; // 上一次出水量 (用于计算速度)
        extern uint64_t speed_last_time; // 上一次出水时间 (用于计算速度)
        extern int SelWaterTemp;     //当前选择的温度
        extern int RelaTemp;         // 实际水温？ 需要更多上下文理解        补充：实时温度

        extern bool isStartHot;     // 热水是否开启
        extern int BoilingPoint;     //沸点设置
        extern int TempButtonState[8]; // 默认温度列表
        extern bool is_increace;    // 是否是温度递增？ 需要更多上下文

        extern bool switch_zero_water;	//零陈水开关
        extern int8_t ledType;	//出水开灯类型
        extern int ledTime;	//出水开灯时间
        extern int coldTemp;	//制冷停机温度
    }

    namespace Timer {
		extern int CountH;		// 1h计时
        extern int CountS;     	// 10min计时
        extern int Counth;     	// 8h计时
        extern int htotalCount; // 8h总计时间
        extern int totalCount; // 10min总计时间
        extern int compressorTime;		//压缩机启动需间隔5分钟
        extern int freezingOnS;			//达成自动制冷条件秒数
        extern int freezingOffS;			//达成停止制冷条件秒数
        extern int singleice;					//单次制冰时间

        extern int iceHL;		//自定义制冰开始h
        extern int iceHR;		//自定义制冰结束h
        extern int iceML;
        extern int iceMR;

        extern int coldHL;		//自定义制冷开始h
        extern int coldHR;		//自定义制冷结束h
        extern int coldML;
        extern int coldMR;
    }

    namespace Flags {
        extern int WarnIndex;  //当前警告类型-1表示没有
        extern bool is_warn_cartridge_over;	//是否已经报警滤芯寿命结束
        extern bool is_open_warn_cartridge_over; //是否打开报警滤芯寿命结束
        extern bool is_warn_cartridge_dying;	//是否已经报警滤芯寿命即将结束
        extern bool IsCodeFalg;   // 打印信息是否开启标志位
        extern bool useDefaultTemp; // 是否使用默认温度

        extern int  LackOfWater;    //缺水状态
        extern bool NavibarFalg; //判断故障界面是否已经退出
        extern bool bAutocheck; //通讯故障
		extern bool is_updating;
	    extern bool Serial_flag;    	 // 串口已通标志
		extern bool is_init_ui;			//UI没起来不能报错
		extern bool Auto_refriger;	//自动制冷循环
		extern bool Auto_iceing;	//自动制冰循环
        extern bool ice_sheded;			//脱冰完成
        extern bool ice_full;			//冰满

        extern bool TouchSound;		//触摸声音开关
        extern bool start_ice;				//开启制冰
//        extern bool start_Micro;			//开启微动开关
        extern bool custom_ice;				//自定义时间开启制冰
        extern bool custom_cold;			//自定义时间开启制冷
        extern bool shortcutOut;			//快捷出冰开关
        extern bool shortcutLong;			//长按快捷出冰

        extern bool forceDefrost;			//强制出冰中
        extern bool internalCleaning;			//内部清洗中
    }

    namespace Log {
        extern std::string inquiry_a5_log;     //a5指令打印
        extern std::string inquiry_e5_b2_log;  //e5_b2指令打印
        extern std::string inquiry_e5_fa_log;  //e5_fa指令打印
        extern std::string inquiry_e5_e1_log;  //e5_e1指令打印
        extern std::string inquiry_a2_log;  	//a2指令打印
    }

    namespace Other {
        extern const int INVALID_VALUE;
        extern int last_cool_water_realtime_temp; //上次实时冷水温度
        extern int water_index; // 当前水模式索引？ 需要更多上下文                            补充：固定出水模式索引
        extern int water_reset_index; // 当前水模式索引？ 需要更多上下文          补充：自定义出水模式索引
    	extern int beepVod;      //限制蜂鸣：为0时500ms响三声，为1时不响
    	extern int CountZuart;   //通讯故障标志位
    	extern int jinggaocashi; //for text（警告测试）

    }

    extern JsonHandler j_handler;
}


#endif // GLOBAL_VARIABLES_H
